iT邦幫忙

2022 iThome 鐵人賽

DAY 22
3
AI & Data

就用 Jetson Nano 來實作 Edge AI 吧!系列 第 22

【Day 22】客製化 YOLOv5 模型 (一):建立執行環境

  • 分享至 

  • xImage
  •  

YOLO(You Only Look Once) 物件偵測演算法因為效能優異且準確率高,經常放在邊緣裝置中作為物件偵測的神經網路,和前面我們使用的 SSD(Single Shot MultiBox Detector) 相比可說是有過之而無不及。唯獨其原始框架為 Darknet 並非最大宗的 TensorFlow 或 Pytorch,因此在實作較為不便,通常仍需在 TensorFlow 或 Pytorch 上重新實作,才便於在 Edge Device 上佈署應用。接下來這段落將會來介紹使用 Jetson Nano 進行 YOLOv5 的實作!

YOLO 的代表性圖片 (source: pjreddie.com)
YOLO 的代表性圖片 (source: pjreddie.com)

為什麼用 YOLOv5?

YOLO 的最新版本(同時也是官方承認的版本) YOLOv7 在今年七月才熱騰騰的火熱出爐,而邊緣裝置上出現頻率最高的幾乎也是 YOLOv3 或 YOLOv4。為什麼本篇要使用並未被官方(原作者)承認且備受爭議的 YOLOv5 呢?主要是因為本系列文章的目的旨在讓新手小白容易使用 Jetson Nano 進入 Edge AI 領域,雖然 YOLOv5 並非最新也沒有論文學理支撐,但因為其使用 Pytorch 作為原生框架,並且實作文件上也很完整(也許是商業公司的關係),在 NVIDIA Jetson 及其他邊緣裝置上移植性更好,在環境的建立上對新手來說更為友善。當然若已經是 Edge AI 的老鳥了,不妨跟一下最新的 YOLOv7,看能不能也在 Jetson Nano 上實現。不過本篇還是以帶新手入門的精神,接下來將使用 YOLOv5 作為介紹。

安裝 YOLOv5 的執行環境

安裝系統跟使用者資訊設置的部份,就不多作介紹了。筆者的 reComputer Jetson Nano 環境,是使用 NVIDIA 提供映像檔安裝的 Ubuntu 18.04,JetPack 的版本是 4.6,經實測過如果 JetPack 的版本是 4.6.1 也是沒問題的呦。

1. 設置 Swap 空間

建立 Swap 虛擬記憶體儲存空間,主要是用來輔助實體記憶體的不足,雖然說是輔助,但它並不能取代實體記憶體,速度上也較慢。但當記憶體不足時,可以多多少少幫上點忙。

請打開終端機,依序輸入下方指令,輸入一行就按一下 Enter。過程中,可能會需要輸入密碼,賦予執行權限,密碼輸入過程並不會顯示,輸入完畢請按下 Enter 繼續執行。

全部輸入完畢將可獲得額外 4GB 的虛擬儲存空間,如果想要更大,可以更換第一行的「4G」。

sudo fallocate -l 4G /var/swapfile
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'

操作如下圖所示:

https://www.circuspi.com/wp-content/uploads/2022/08/01.png

輸入「free -m」指令將可察看現有空間配置,原先 Swap 已有一些空間,再加上我們方才配置的 4G,如下圖所示:

https://www.circuspi.com/wp-content/uploads/2022/08/02.png

2. 取得套件更新清單

在開始安裝套件之前,我們需要輸入下列指令,並按下 Enter,這個指令會取得遠端更新伺服器的套件檔案清單。

sudo apt update

https://www.circuspi.com/wp-content/uploads/2022/08/03.png

取得遠端更新清單,過程並不會太久,不到 20 秒即可完成,完成後如下圖。可以看到訊息中有提示能更新的套件有 310 個。

https://www.circuspi.com/wp-content/uploads/2022/08/04.png

3. 安裝 pip

接著安裝Python3版本的軟體包管理系統「pip」,功能是幫我們管理 python3 相關的套件包與安裝,我們需要透過它安裝執行 YOLOv5 所需要的套件。

sudo apt install -y python3-pip

https://www.circuspi.com/wp-content/uploads/2022/08/05.png

一樣是輸入後按下 Enter 鍵,完成後如下圖所示:

https://www.circuspi.com/wp-content/uploads/2022/08/06.png

4. 更新 pip

安裝完畢後為了確保版本為最新,我們可以輸入以下指令更新 pip,pip 的版本將會左右我們能否下載到新的套件,所以建議更新到最新。

pip3 apt --upgrade pip

https://www.circuspi.com/wp-content/uploads/2022/08/07.png

更新完成後即可在畫面中看到裝好的版本,如下圖所示,更新後的版本是「21.3.1」。

https://www.circuspi.com/wp-content/uploads/2022/08/08.png

5. 下載 YOLOv5

透過「git」工具,我們將從 YOLOv5 官方 github 下載所有程式到我們的 Jetson Nano 裡。

git clone https://github.com/ultralytics/yolov5

https://www.circuspi.com/wp-content/uploads/2022/08/09.png

下載完成,如下圖所示:

https://www.circuspi.com/wp-content/uploads/2022/08/10.png

6. 開始安裝 YOLOv5

6-1. 移動路徑

首先我們將路徑移至方才下載的「yolov5」資料夾底下,透過下列指令可以讓我們移動到目的地。

cd yolov5

https://www.circuspi.com/wp-content/uploads/2022/08/11.png

6-2. 修改安裝文件

yolov5 資料夾內有個「requirements.txt」文件,這份文件內有安裝 YOLOv5 所需要的全部套件指令,只要透過 pip 安裝執行這個文件,就可以將 YOLOv5 裝好。但這僅限在 PC 上,Jetson Nano 這邊並沒有辦法這樣處理,我們需要修改一些項目。

請輸入下列指令啟動文字編輯器「gedit」來修改 requirements.txt 文件,若您有習慣的編輯器如 nano 或是 vi,宜可透過這些編輯器修改。

gedit requirements.txt

https://www.circuspi.com/wp-content/uploads/2022/08/12.png

首先是修改「matplotlib」與「numpy」的版本,原先只要求要大過多少版本即可,這樣的設定會讓系統從最新的版本開始嘗試安裝,但新的版本沒辦法相容 Jetson Nano,導致安裝時因為新版本不行,系統就會降版後繼續嘗試安裝,降版後不行就再繼續降版,直到對應到的版本支援為止,過程中相當耗時且無意義,所以在此我們直接指定它們的版本。

matplotlib==3.2.2
numpy==1.19.4

https://www.circuspi.com/wp-content/uploads/2022/08/13.png

接著註解掉「torch」與「torchvision」的安裝,在指令的前方加上「#」在 python 裡面表示忽略。

YOLOv5 使用的神經網路框架是 Pytorch,在 Jetson Nano 上並沒有辦法單純用 pip 安裝,所以將它們註解掉,之後再依照 Jetson Nano 的規則安裝。

# torch>=1.7.0
# torchvision>=0.8.1

https://www.circuspi.com/wp-content/uploads/2022/08/14.png

修改完畢後請按下右上角的儲存按鈕,並關閉文件。

6-3. 單獨安裝必要套件

在安裝 requirements.txt 文件之前,需要搶先安裝「libfreetype6-dev」這個套件,以便過程中不會因為缺少相依的套件而失敗,請輸入以下指令安裝。

sudo apt install -y libfreetype6-dev

https://www.circuspi.com/wp-content/uploads/2022/08/15.png

6-4. 安裝執行 requirements.txt

接著就讓我們下指令啟動 requirements.txt 文件進行套件的安裝,過程中會需要一段時間,因為要安裝的套件相當多。

pip3 install -r requirements.txt

https://www.circuspi.com/wp-content/uploads/2022/08/16.png

安裝完成後可能會出現紅色字的提示,一旦出現紅字需要特別閱讀,查看是哪邊有問題並解決,但這邊描述的內容無傷大雅,且必要套件皆安裝成功,所以可以忽略。

https://www.circuspi.com/wp-content/uploads/2022/08/17.png

7. 安裝 Pytorch 與 Torchvision

接下來我們將用符合 Jetson Nano 的方式安裝 Pytorch 與 Torchvision,讓我們依照下列步驟安裝。

7-1. 安裝 Pytorch

首先打開一個新的終端機,並輸入以下指令安裝必要的套件軟體,過程中可能會需要輸入密碼,賦予執行權限。

sudo apt-get install -y libopenblas-base libopenmpi-dev

https://www.circuspi.com/wp-content/uploads/2022/08/18.png

接著透過「wget」指令下載適合 Jetson Nano 的 Pytorch 安裝檔案。

wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl

https://www.circuspi.com/wp-content/uploads/2022/08/19.png

下載完畢後即可使用 pip 指令安裝 Pytorch。

pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl

https://www.circuspi.com/wp-content/uploads/2022/08/20.png

安裝完畢後如下圖所示:

https://www.circuspi.com/wp-content/uploads/2022/08/21.png

7-2. 安裝 Torchvision

與安裝 Pytorch 一樣,在安裝主要套件之前,需要安裝相依的套件。

sudo apt install -y libjpeg-dev zlib1g-dev

https://www.circuspi.com/wp-content/uploads/2022/08/22.png

接著使用「git」指令下載 Torchvision 的程式碼。

git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision

https://www.circuspi.com/wp-content/uploads/2022/08/23.png

透過「cd」指令移動到剛剛下載的 torchvision 資料夾內。

cd torchvision

https://www.circuspi.com/wp-content/uploads/2022/08/24.png

最後透過下列指令安裝 torchvision。

sudo python3 setup.py install

https://www.circuspi.com/wp-content/uploads/2022/08/25.png

完成後如下圖所示,流程到此所有套件都安裝完畢啦!

https://www.circuspi.com/wp-content/uploads/2022/08/26.png

小結

今天都在做環境的建立,內容可能會比較無趣一點,明天就可以開始測試模型啦!千萬別錯過囉!


上一篇
【Day 21】Hello AI World (七):即時影像標註工具 Camera-Capture
下一篇
【Day 23】客製化 YOLOv5 模型 (二):測試 YOLOv5 推論
系列文
就用 Jetson Nano 來實作 Edge AI 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言